#!/usr/bin/env python
# -*- coding: utf-8 -*-

# 该文件主要用于各种时间格式处理的方法

import time

from commons.logger import log
from commons.assert_tools import Assert


class TmOp:

    def __init__(self, log_n="log"):
        self.log = log_n  # 定义日志存放的文件名

    def tm_stamp(self, num=10):
        """
        获取指定位数的当前时间戳
        num 需获取的时间戳的位数
        """
        if num == 10:
            time_stamp = int(time.time())  # 时间戳10位
            log.info("获取到%s位数的时间戳为%s:" % (str(time_stamp), str(num)))
            return time_stamp
        elif num == 13:
            time_stamp = round(time.time() * 1000)  # 时间戳13位
            log.info("获取到%s位数的时间戳为%s:" % (str(time_stamp), str(num)))
            return time_stamp
        else:
            Assert().fail_assert("您要获取时间戳位数为:%s,未定义该位数的时间转换,请检查参数,或在函数里增加该逻辑!")

    def tm_format(self, num=10, time_format='%Y-%m-%d %H:%M:%S'):
        """
        获取指定格式的时间
        num 需获取的时间戳的位数
        time_format 时间戳转换成具体时间的指定格式
        """
        time_stamp = self.tm_stamp(num)
        if num == 10:
            str_time = time.strftime(time_format, time.localtime(time_stamp))
            log.info("获取的时间格式为:%s" % str(str_time))
            return str_time
        elif num == 13:
            str_time = time.strftime(time_format, time.localtime(time_stamp / 1000))
            log.info("获取的时间格式为:%s" % str(str_time))
            return str_time
        else:
            Assert().fail_assert("您要获取时间戳位数为:%s,未定义该位数的时间格式转换,请检查参数,或在函数里增加该逻辑!")

    def to_stamp(self, str_time, time_format='%Y-%m-%d %H:%M:%S'):
        """
        指定时间转换成时间戳
        str_time 指定的具体时间字符串               如2024-06-22 18:14:12
        time_format 时间格式,与str_time格式保持一致 如"%Y-%m-%d %H:%M:%S"
        """
        date_array = time.strptime(str_time, time_format)
        time_stamp = int(time.mktime(date_array))
        log.info("指定时间:%s,转换为时间戳的值为:%s" % (str_time, str(time_stamp)))
        return time_stamp

    def record(self):
        """用于记录操作时间/执行用例的时间(记录时间专用)"""
        time_str = self.tm_format()
        time_record = log.info("* * * * * * 执行/操作时间为:%s" % str(time_str) + " * * * * * *")
        return time_record
